import router from "@/router"
import axios from "axios"
import elementUI from "element-ui"
//引入进度条
import nprogress from "nprogress"
//引入进度条css文件
import "nprogress/nprogress.css"

let CancelToken = axios.CancelToken

let http = axios.create({
    // baseURL:"/api",//配置默认的地址
    withCredentials:true,//默认携带token认证
    timeout:1000*10,//超时设置
})
//放在原型上的好处就是一次定义永久继承

//请求拦截器
http.interceptors.request.use(function(config){
    nprogress.start()
    //由于请求数据的时候需要请求头携带后端定义的token
    //但是登陆的时候并不需要，所以做判断放行
    let throwPath = ["/users/login","/users/getCaptcha","/users/verifyCaptcha"]//这个数组里的路径是可以直接放行的地址
    if(throwPath.includes(config.url)){
        return config//匹配到直接放行
    }else{
        //从本地取出token
        let token = localStorage.getItem("qf-token") || ""
        // console.log(token);
        config.headers["authorization"] = token //给请求头添加authorization=token
        return config
    }
})//请求拦截器，抓取所有请求，添加需要的逻辑

//响应拦截
http.interceptors.response.use(function(config){//现在全部的响应都会拦截 return config 放行
    //当响应回来的状态码 是10022 1004的时候 需要跳转到登录页并清除token
    nprogress.done()
    if(config.data.code==="10022" || config.data.code==="1004"){
        router.push("/login")
        localStorage.removeItem("qf-token")
        //刷新页面
        location.reload()
        //提示用户登录过期
        elementUI.Message.error("登录过期，请重新登录")
    }
    return config
})


export {
    http as default,
    CancelToken
}